关于 Linux中缓存清理的一些笔记
归根结底,长得好,无论男女,怎么都是对的,长得不好看,大概就是万般皆罪。 ——烽火戏诸侯《剑来》
写在前面
- 一个群里看到有小伙伴问,之前也有遇到过。
- 给了参考意见之后感觉好像不是特别对,有点误人子弟:(。
- 所以总结下,博文内容涉及
- Linux内存
查看监控
缓存清理
及参数介绍- 一个
定时清理
的脚本
- Linux内存
归根结底,长得好,无论男女,怎么都是对的,长得不好看,大概就是万般皆罪。 ——烽火戏诸侯《剑来》
嗯,关于缓存清理,小伙伴一定不陌生,个人觉得通过修改drop_caches
内核参数的形式来清理缓存,只能是在生产环境用于临时解决问题,本质还是要对应用进行分析,看看是什么原因导致的内存溢出等OOM问题,一般情况下,内存溢出可以通过交换分区来确定
当然,如果是因为业务量的原因,业务高峰,或者需要算力等正常原因,可以定期通过sync
将缓存区没有写入数据写入磁盘,然后修改内核参数 drop_caches
的值来清理缓存,或者通过新建交换分区调整swappiness
交换分区频率来解决问题,如果虚机的话可以申请扩内存
系统内存查看
系统内存查看 |
---|
![]() |
![]() |
其中:
Mem
:实际的内存 |Swap
: 交换分区 |
total
内存总数used
已经使用的内存数free
空闲的内存数shared
多个进程共享的内存总额buff/Cache
缓存的内存大小available
可用内存
free 与 available 的区别
:free 是真正尚未被使用的物理内存数量。available 是应用程序认为可用内存数量,available = free + buffer + cache (注:只是大概的计算方法)
系统内存监控
系统内存监控 |
---|
![]() |
![]() |
vmstat
: 是一个内存监控工具,后面的数字为刷新频率 |top
不多说
vmstat | 列描述 |
---|---|
free |
空闲的物理内存的大小。 |
buff |
Linux/Unix系统是用来存储,目录里面有什么内容,权限等的缓存. |
cache |
cache直接用来记忆我们打开的文件,给文件做缓冲,我本机大概占用300多M(这里是Linux/Unix的聪明之处,把空闲的物理内存的一部分拿来做文件和目录的缓存,是为了提高 程序执行的性能,当程序使用内存时,buffer/cached会很快地被使用。) |
修改drop_caches内核参数清理缓存
我们先看看帮助文档:内核参数的帮助文档查看方式
1 | ┌──[root@liruilongs.github.io]-[/proc/sys/vm] |
嗯,英文好的小伙伴可以看看
1 | drop_caches |
手动执行sync命令(描述:sync 命令运行 sync 子例程。如果必须停止系统,则运行sync 命令以确保文件系统的完整性。sync 命令将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件)
1 | ┌──(root💀Liruilong)-[/mnt/c/Users/lenovo] |
对缓存进行清理
1 | ┌──(root💀Liruilong)-[/mnt/c/Users/lenovo] |
清理缓存 |
---|
![]() |
![]() |
我们来看看文档
写入
drop_caches
将导致内核丢弃干净的缓存,以及可回收的slab对象,如dentry和inode。一旦下降,他们内存得到释放。
具体的参数描述
1 | To free pagecache: |
使用此文件可能会导致性能问题。因为它丢弃了缓存对象,它可能会花费大量的I/O和CPU来重新创建掉落的物体,特别是大量使用时。由于这个原因,不建议在测试或调试环境之外使用。
在内核的文档里也说不建议在测试或调试环境之外使用,重建一些需要的缓存还是会消耗大量的I/O和CPU,同时这也不是一个必要操作,一些不用的缓存系统会自动的清理掉
一个SHELL
最后在和小伙伴分享一个清理缓存的shell
1 |
|
关于 Linux中缓存清理的一些笔记
https://liruilongs.github.io/2021/12/27/Linux/关于 Linux中缓存清理的一些笔记/
1.如何使用 BPF 监控 Linux 用户态小内存分配:Linux 内存调优之 BPF 分析用户态小内存分配
2.Linux 内存调优之 BPF 分析用户态 mmap 大内存分配
3.如何使用 BPF 分析 Linux 内存泄漏,Linux 性能调优之 BPF 分析内核态、用户态内存泄漏
4.认识 Linux 内存构成:Linux 内存调优之页表、TLB、缺页异常、大页认知
5.Linux 系统内存监控:Linux 内存调优之系统内存全面监控
6.Linux 进程内存监控:Linux 内存调优之进程内存深度监控
7.如何使用 eBPF 监控 Linux 内存 OOM killer:Linux 内存调优之 eBPF 监控内存 OOM killer 事件
8.认识 Linux 内存构成:Linux 内存调优之虚拟内存与物理内存